package pe.gob.foncodes.ssa.bs.common.util;


import pe.gob.foncodes.ssa.bs.administracion.controller.GenericMaintenanceController;

public class PasswordHelper extends GenericMaintenanceController {

    public static String NUMEROS = "0123456789";
    public static String MAYUSCULAS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    public static String MINUSCULAS = "abcdefghijklmnopqrstuvwxyz";
    public static String mensaje;

    public static String getPinNumber() {
        return getPassword(NUMEROS, 4);
    }

    public static String getPassword(int length) {
        return getPassword(NUMEROS + MAYUSCULAS + MINUSCULAS, length);
    }

    public static String getPassword(String key, int length) {
        String pswd = "";

        for (int i = 0; i < length; i++) {
            pswd += (key.charAt((int) (Math.random() * key.length())));
        }

        return pswd;
    }

    public static boolean controlPass(String contraIni, String contraFini, String codigo, String final_enc) {
        System.out.println(">>>>final_enc="+final_enc);
        String ini_enc=StringHelper.miCad(contraIni,Constante.SEPARADOR_CONTRASENIA);
        System.out.println(">>>>ini_enc="+ini_enc);
        String ci=contraIni;
        boolean flag = false;
        
        //Si es menor que 8
        if (contraFini.length() >= 8) {
            if(contraIni.equals(contraFini)){
                mensaje = "La nueva contraseña debe ser diferente a la contraseña anterior.";
                return false;
            }
            //Si es igual a alguna contrasenia anterior
            for (int j = 0; j <= StringHelper.frecuenciaCaracter(contraIni, Constante.SEPARADOR_CONTRASENIA); j++) {
                if (!ini_enc.equals(final_enc)) {
                    ci = StringHelper.reCad(ci, Constante.SEPARADOR_CONTRASENIA);
                    ini_enc = StringHelper.miCad(ci, Constante.SEPARADOR_CONTRASENIA);
                } else {
                    mensaje = "No debe utilizar contraseñas anteriores.";
                    return false;
                }
            }
            //Que no sea igual al codigo o lo contenga
            if (!contraFini.toUpperCase().contains(codigo.toUpperCase())) {
                //Que no sea el codigo de usuario invertido
                if (!contraFini.toUpperCase().equals(StringHelper.invertirCadena(codigo.toUpperCase()))) {
                    if(StringHelper.tieneLetraMayuscula(contraFini)){
                        //Que contenga al menos una letra y/o un numero
                        if (StringHelper.tieneLetras(contraFini)) {
                            if (StringHelper.tieneNumeros(contraFini)) {
                                flag = true;
                            } else {
                                mensaje = "La nueva contraseña necesita al menos un número";
                            }
                        } else {
                            mensaje = "La nueva contraseña necesita al menos una letra";
                        }
                    } else{
                        mensaje = "La nueva contraseña necesita al menos una letra en mayúscula";
                    }
                } else {
                    mensaje = "La nueva contraseña no debe ser igual al codigo de usuario invertido";
                }
            } else {
                mensaje = "La nueva contraseña no debe contener el codigo de usuario";
            }
        } else {
            mensaje = "La contraseña no puede ser menor a 8 caracteres. Por favor, ingrese la contraseña denuevo";
        }
        return flag;
    }

    public static String listaPassword(String listaPass, int i) {
        String listaActPass = "";
        int f = 0;
        for (int j = 0; j < listaPass.length(); j++) {
            if (String.valueOf(listaPass.charAt(j)).equals(Constante.SEPARADOR_CONTRASENIA)) {
                f++;
            }
            if (f < i) {
                listaActPass = listaActPass + listaPass.charAt(j);
            }
        }
        return listaActPass;
    }

    public static void main(String[] args) throws Exception {
        PasswordHelper ph = new PasswordHelper();
    }
}